In modern software development, applications are often developed in such a fashion as to allow additional features and functionality to be added to the completed application. Applications that are developed in this fashion are said to be extensible or follow an extensibility model. One common method that is used to extend an application is to create functionality in a component called an add-in. A second common method that is used to extend an application is through the use of a scripting engine and scripts. An application that provides for extensibility is referred to as a host because that application provides the environment in which the extensions operate.
An add-in is a set of computer instructions compiled into at least one binary file. The add-in relies on the pre-defined knowledge of the host. Extending an application using a script does not require pre-defined knowledge of the host, but does require that the host implement an environment in which the script is to be executed. The reason the host must be aware of the script engine is because scripts, in general, are not compiled. Further, for a host to allow extensibility via scripts, the script engine must be defined before the application is completed so that it can be included as part of the available options. The host must also be aware of when to initiate the script engine and how and when to find the scripts to execute on it. This has the result of locking programmers into only those scripting languages that are supported for that application, if any are even supported at all.